//////////////////////////////////////////////////////////////////////
//  Jack McCaffery
//  11-10-2014
//////////////////////////////////////////////////////////////////////

#pragma once

#include "topicModel/basicData.H"

template <class SC>
class FixedParameters;

/// \brief Base class for model parameters. SC is the scalar type
template <class SC>
class ParameterGroup : public BasicData<SC>
{
public:
	~ParameterGroup ()
	{ }

	ParameterGroup ()
	{ }

	/// \brief Apply a gradient with a rate parameter
	/// \param gradient_ The gradient to apply. Dimensions must
	///	   match the dimensions of data
	/// \param rate_ A rate that controls the magnitude of the gradient
	virtual void applyGradient (FixedParameters<SC> const &gradient_,
				    double rate_) = 0;
};



